package com.ruoyi.platform.system.role.dao;

import com.ruoyi.platform.system.role.pojo.UserRoleDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author lcf
 * @since 2021-11-23 11:21:14
 */
@Mapper
@Repository
public interface UserRoleDAO {
    /**
     * 插入数据 全部插入
     *
     * @param record {@link UserRoleDO}
     * @return 影响行数
     **/
    int insertUserRole(UserRoleDO record);

    /**
     * 插入数据 部分插入
     *
     * @param record {@link UserRoleDO}
     * @return 影响行数
     **/
    int insertUserRoleSelective(UserRoleDO record);

    /**
     * 插入数据 批量插入
     *
     * @param recordList {@link List<UserRoleDO>}
     * @return 影响行数
     **/
    int insertUserRoleBatch(@Param("list") List<UserRoleDO> recordList);

    /**
     * 批量部分插入
     *
     * @param recordList {@link List<UserRoleDO>}
     * @return 影响行数
     **/
    int insertUserRoleSelectiveBatch(@Param("list") List<UserRoleDO> recordList);

    /**
     * 更新数据 全部更新
     *
     * @param record {@link UserRoleDO}
     * @return 影响行数
     **/
    int updateUserRoleByPrimaryKey(UserRoleDO record);

    /**
     * 更新数据 部分更新
     *
     * @param record {@link UserRoleDO}
     * @return 影响行数
     **/
    int updateUserRoleByPrimaryKeySelective(UserRoleDO record);

    /**
     * 通过主键删除该数据
     *
     * @param id 主键Number
     * @return 影响行数
     **/
    int delUserRoleByPrimaryKey(@Param("id") Integer id);

    /**
     * 通过主键查询数据
     *
     * @param id 主键Number
     * @return {@link UserRoleDO}
     **/
    UserRoleDO selectUserRoleByPrimaryKey(@Param("id") Integer id);

    /**
     * 通过主键列表查询数据
     *
     * @param idList {@link List<Integer>} 主键Number列表
     * @return {@link List<UserRoleDO>}
     **/
    List<UserRoleDO> selectUserRoleByPrimaryKeyList(@Param("list") List<Integer> idList);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询
     *
     * @param query {@link UserRoleDO}
     * @return {@link List<UserRoleDO>}
     **/
    List<UserRoleDO> selectByUserRole(UserRoleDO query);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询数量
     *
     * @param query {@link UserRoleDO}
     * @return 统计行数
     **/
    int selectUserRoleCount(UserRoleDO query);


    /**
     * 检查用户角色权限
     */
    int checkUserRole(@Param("userId") long userId,
                      @Param("roleCodeList") List<Integer> roleCodeList);

    /**
     * 获取用户角色
     */
    UserRoleDO getUserRole(@Param("userId") long userId,
                           @Param("roleCode") int roleCode);

    /**
     * 删除用户角色
     */
    void delUserRole(@Param("userId") long userId,
                     @Param("roleCode") Integer roleCode);

    /**
     * 查询用户角色
     */
    List<UserRoleDO> selectByUserIdList(@Param("userIdList") List<Long> userIdList);
    /**
     * 删除用户角色
     */
    void delByUserId(@Param("userId") long userId);
}